package com.java.jiuyang.cloud.cleancode.controller;

import com.java.jiuyang.cloud.cleancode.errorhandle.CustomException;
import com.java.jiuyang.cloud.cleancode.errorhandle.ExceptionEnum;
import com.java.jiuyang.cloud.feign.provider.AuthenticationServiceApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import sun.misc.Request;

/**
 * @ClassName: TestController
 * @Description:
 * @Version: v1.0.0
 * @Author: Fu Hao
 * @Date: 2019/11/12 0012 上午 9:10
 * Modification History:
 * Date           Author      Version     Description
 * -------------------------------------------------------------
 * 2019/11/12 0012        Fu Hao      v1.0.0         创建
 */
/*在项目中使用SpringMVC全局异常处理：
* 当程序发生错误时，返回错误内容，会搞乱了调用者代码。调用者必须在调用之后即刻检查错误，不幸的是，这个步骤很容易被遗忘。
  建议在发生错误时抛出异常，调用代码很整洁，绮逻辑不会被错误处理搞乱。
                                           ————–《代码整洁之道》

*完整的引入全局异常处理机制，包含以下四个类：

    CustomRestExceptionHandler（继承ResponseEntityExceptionHandler）用来监听处理全局异常
    CustomException（继承RuntimeException）自定义异常类
    ExceptionEnum 异常枚举类
    ErrorDTO 异常响应DTO，规范异常发生时的接口返回值

CustomException和ExceptionEnum的配合使用，主要是为了统一管理所有的异常，这对异常码的统一与复用十分重要

异常处理逻辑：
1、开发人员在ExceptionEnum中定义列举所有的异常（异常码、异常信息），这样主要是方便管理所有异常码
2、在代码错误处理逻辑中，new一个CustomException并throw，创建CustomException的参数建议使用ExceptionEnum的值
3、异常如果没有没catch并处理的话，会抛到controller处理层，这时会被CustomRestExceptionHandler捕获到
4、CustomRestExceptionHandler将异常封装到ErrorDTO，并作为接口响应值返回给调用接口者
*

* */

@RestController
@RequestMapping("/user")
public class TestController {

   /* @Autowired
    private AuthenticationServiceApi serviceApi;

    @RequestMapping(value = "/",method = RequestMethod.GET)
    public void getUser(){
         throw new CustomException(ExceptionEnum.LOGIN_USERNAME_ERROR.getHttpStatus(),
                 ExceptionEnum.LOGIN_USERNAME_ERROR.getError_code(),
                 ExceptionEnum.LOGIN_USERNAME_ERROR.getError_desc());
    }*/
}
